home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import gtk
- import gobject
- import sys
- import dbus
- import logging
- import ScreenResolution
- from ScreenResolution import ui
- SERVICE_NAME = 'com.ubuntu.ScreenResolution.Mechanism'
- OBJECT_PATH = '/'
- INTERFACE_NAME = 'com.ubuntu.ScreenResolution.Mechanism'
- usage = 'python policyui.py 1024x768'
- import os
- import sys
- from subprocess import Popen, PIPE
- import XKit
- from XKit import xutils, xorgparser
- clean = False
-
- def checkVirtual(virtres):
- """See if it's necessary to set the virtual resolution"""
- source = '/etc/X11/xorg.conf'
-
- try:
- a = xutils.XUtils(source)
- except (IOError, XKit.xorgparser.ParseException):
- return False
-
- if len(a.globaldict['Screen']) > 0:
- res = None
- for screen in a.globaldict['Screen']:
-
- try:
- res = a.getValue('SubSection', 'virtual', 0, identifier = 'Display', sect = 'Screen', reference = None)
- if res:
- if 'x' in res.lower():
- res = res.lower().split('x')
- elif ' ' in res.lower().strip():
- res = res.lower().split(' ')
- res = filter((lambda x: x != ''), res)
- if len(res) == 2 and int(virtres[0]) <= int(res[0]) and int(virtres[1]) <= int(res[1]):
- return True
-
- continue
- except (XKit.xorgparser.SectionException, XKit.xorgparser.OptionException, AttributeError):
- continue
-
-
-
-
- return False
-
-
- def get_xkit_service(widget = None):
- '''
- returns a dbus interface to the screenresolution mechanism
- '''
- service_object = dbus.SystemBus().get_object(SERVICE_NAME, OBJECT_PATH)
- service = dbus.Interface(service_object, INTERFACE_NAME)
- return service
-
-
- def gui_dialog(message, parent_dialog, message_type = None, widget = None, page = 0, broken_widget = None):
- '''
- Displays an error dialog.
- '''
- if message_type == 'error':
- message_type = gtk.MESSAGE_ERROR
- logging.error(message)
- elif message_type == 'info':
- message_type = gtk.MESSAGE_INFO
- logging.info(message)
-
- dialog = gtk.MessageDialog(parent_dialog, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, message_type, gtk.BUTTONS_OK, message)
- translation = ui.AbstractUI()
- dialog.set_title(translation.string_title)
- if widget != None:
- if isinstance(widget, gtk.CList):
- widget.select_row(page, 0)
- elif isinstance(widget, gtk.Notebook):
- widget.set_current_page(page)
-
-
- if broken_widget != None:
- broken_widget.grab_focus()
- if isinstance(broken_widget, gtk.Entry):
- broken_widget.select_region(0, -1)
-
-
- if parent_dialog:
- dialog.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
- dialog.set_transient_for(parent_dialog)
- else:
- dialog.set_position(gtk.WIN_POS_CENTER)
- ret = dialog.run()
- dialog.destroy()
- return ret
-
-
- class BootWindow:
- optimal_virtual_resolution = [
- '2048',
- '2048']
-
- def __init__(self, resolution):
- translation = ui.AbstractUI()
- self.permission_text = translation.string_permission_text
- self.dbus_cant_connect = translation.string_dbus_cant_connect
- self.operation_complete = translation.string_operation_complete
- self.cant_apply_settings = translation.string_cant_apply_settings
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.connect('delete_event', self.on_delete_event)
- self.window.connect('destroy', self.on_destroy)
- self.window.set_border_width(20)
- self.window.set_title(translation.string_title)
- self.window.set_position(gtk.WIN_POS_CENTER)
- gtk.window_set_default_icon_from_file('/usr/share/icons/hicolor/16x16/apps/gnome-display-properties.png')
- vbox = gtk.VBox(spacing = 20)
- self.resolution = resolution
- self.label = gtk.Label(self.permission_text)
- self.label.set_line_wrap(True)
- self.label.set_justify(gtk.JUSTIFY_FILL)
- self.button1 = gtk.Button(label = None, stock = 'gtk-yes', use_underline = False)
- self.button1.connect('clicked', self.on_button1_clicked, None)
- self.button1.show()
- self.button2 = gtk.Button(label = None, stock = 'gtk-no', use_underline = False)
- self.button2.connect('clicked', self.on_button2_clicked, None)
- self.button2.show()
- buttonbox = gtk.HButtonBox()
- buttonbox.set_layout(gtk.BUTTONBOX_END)
- buttonbox.set_spacing(10)
- buttonbox.pack_start(self.button2)
- buttonbox.pack_start(self.button1)
- buttonbox.show()
- vbox.pack_start(self.label)
- vbox.pack_start(buttonbox)
- self.window.add(vbox)
- self.label.show()
- vbox.show()
-
-
- def on_button1_clicked(self, widget, data = None):
- global clean
- self.window.hide()
- self.conf = get_xkit_service()
- if not self.conf:
- sys.exit(1)
-
- if int(self.resolution[0]) < int(self.optimal_virtual_resolution[0]) and int(self.resolution[1]) < int(self.optimal_virtual_resolution[1]):
- self.resolution = self.optimal_virtual_resolution
-
- status = self.conf.setVirtual(self.resolution)
- if status == True:
- clean = True
- gtk.main_quit()
- else:
- gtk.main_quit()
-
-
- def on_button2_clicked(self, widget, data = None):
- self.window.hide()
- gtk.main_quit()
-
-
- def on_delete_event(self, widget, event, data = None):
- return False
-
-
- def on_destroy(self, widget, data = None):
- gtk.main_quit()
-
-
- def show(self):
- self.window.show()
-
-
- if __name__ == '__main__':
- if len(sys.argv) > 1:
- for param in sys.argv[1:]:
- if 'x' not in param:
- sys.exit(0)
- continue
-
- else:
- sys.exit(0)
- res = sys.argv[1]
- res = res.strip().split('x')
- if checkVirtual(res):
- sys.exit(0)
-
- window = BootWindow(res)
- window.show()
- gtk.main()
- if not clean:
- sys.exit(1)
-
-
-